﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Net.Mail;
using System.Net;

public partial class Artigo_AlterarArtigo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["i"] == null)
            Response.Redirect("../DefaultUS.aspx");
        if (Session["Usuario"] == null || Session["TipoUsuario"] == null)
            Response.Redirect("../Login.aspx");
        if (Session["Evento"] == null)
            Response.Redirect("../DefaultUS.aspx");
        if (Session["TipoUsuario"].ToString() != "Usuario")
            Response.Redirect("../Default.aspx");
    }
    [WebMethod]
    public static bool prazo()
    {
        Evento evento = Evento.findEventoById(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()));
        DateTime now = DateTime.Now;
        if (now > evento.dataArtigoInicial && now < evento.dataArtigoFinal)
            return true;
        else
            return false;
    }
    [WebMethod]
    public static List<Trilha> carregarTrilha()
    {
        DataClassesDataContext dc = new DataClassesDataContext();
        return dc.Trilhas.Where(p => p.idEvento.Equals(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()))).OrderBy(p => p.nome).ToList();
    }
    [WebMethod]
    public static Resultado<Usuario> getPessoas(int pagina, string nome)
    {
        int pag = pagina - 1;
        int i = pag * 4;
        DataClassesDataContext dc = new DataClassesDataContext();
        Resultado<Usuario> resultado = new Resultado<Usuario>();
        List<Usuario> listaUsuario = dc.Usuarios.Where(p => p.Pessoa.nome.Contains(nome)).ToList();
        resultado.Data = listaUsuario.Skip(i).Take(4).ToList();
        resultado.TotalCount = listaUsuario.Count;
        return resultado;
    }
    [WebMethod]
    public static Usuario getAutor(string id)
    {
        return Usuario.findById(new Guid(id));
    }
    [WebMethod(EnableSession = true)]
    public static Evento carregarEvento()
    {
        return Evento.findEventoById(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()));
    }
    [WebMethod]
    public static bool convidarAutor(string nome, string instituicao, string curso, string email, string comentario, string idArtigo)
    {
        bool retorno = true;
        Artigo artigo = Artigo.getArtigoById(new Guid(idArtigo));
        if (!AutoresArtigo.ArtigoByEmailArtigo(email, new Guid(idArtigo)))
        {
            Pessoa pessoa = new Pessoa();
            pessoa.nome = nome;
            pessoa.id = Guid.NewGuid();
            pessoa.instituicao = instituicao;
            pessoa.curso = curso;
            pessoa.dataCadastro = DateTime.Now;
            if (Pessoa.createPessoa(pessoa))
            {
                Usuario usuario = new Usuario();
                usuario.email = email;
                usuario.login = Usuario.createLogin(nome);
                usuario.senha = "1234";
                usuario.id = Guid.NewGuid();
                usuario.IdPessoa = pessoa.id;
                usuario.confirmado = false;
                usuario.idTipoUsuario = new Guid("70906a13-fec3-41ca-aefe-8df91c3a5088");
                if (Usuario.createUsuario(usuario))
                {
                    EnviarEmail(usuario.email, usuario.id.ToString(), usuario.Pessoa.nome, "Convite para ser autor de artigo", artigo.id.ToString(), artigo.titulo, comentario);
                    retorno = true;
                }
                else
                    retorno = false;
            }
        }
        if (!AutoresArtigo.ArtigoByEmailArtigoConfirmado(email, new Guid(idArtigo)))
        {
            Usuario usuario = Usuario.findByEmail(email);
            EnviarEmail(usuario.email, usuario.id.ToString(), usuario.Pessoa.nome, "Convite para ser autor de artigo", artigo.id.ToString(), artigo.titulo, comentario);
        }
        return retorno;
    }
    public static void EnviarEmail(String destinatario, String idUsuario, String nome, String assunto, string idArtigo, string tituloDoArtigo, string comentario)
    {
        Usuario usuario = Usuario.findById(new Guid(idUsuario));
        SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587);
        MailMessage email = new MailMessage();
        cliente.EnableSsl = true;
        cliente.Credentials = new NetworkCredential("sistemaeventosceulp@gmail.com", "sistemaeventos1234");
        email.From = new MailAddress("sistemaeventos@gmail.com", "Sistema Eventos - CEULP/ULBRA");
        email.To.Add(destinatario);
        email.Subject = assunto;
        email.IsBodyHtml = true;
        email.Priority = MailPriority.Normal;
        email.Sender = email.From;
        email.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
        email.BodyEncoding = System.Text.Encoding.Default;
        email.Body = "<div style='text-align: center'><div style='text-align: center'><table><tr><h2>Convite para se tornar autor de artigo<br/>Centro Universitário Luterano de Palmas - CEULP/ULBRA</h2><br/></tr><tr><h3>O artigo com o título &lsquo;<font>" + tituloDoArtigo + "</font>&rsquo;, detalhes <a href='http://localhost:13552/SistemaEventos/Artigo/VisualizarArtigo.aspx?i=" + idArtigo + "'>aqui</a></h3>";
        email.Body += "</tr><tr><h3>Seu login:" + usuario.login + "<h3></tr><tr><h3>Sua senha: 1234</h3></tr><tr><h3>Mensagem personalizada para você:</h3><br/> " + comentario + "</tr>";
        email.Body += "<tr><h3>Para confirmar o ingresso como autor, clique <a href='http://localhost:13552/SistemaEventos/Artigo/ConfirmarConviteAutor.aspx?codigo=" + idUsuario + "'>aqui</a></h3></tr></table></div></div>";
        cliente.Send(email);
    }
    [WebMethod]
    public static string existeUsuario(string email)
    {
        if (Usuario.exist(email))
        {
            string teste = Usuario.findByEmail(email).Pessoa.nome;
            return Usuario.findByEmail(email).Pessoa.nome;
        }
        else
            return "nao";
    }
    [WebMethod]
    public static bool clearAutores(string idArtigo)
    {
        try
        {
            //return AutoresArtigo.clearByArtigo(new Guid(idArtigo));
            DataClassesDataContext dc = new DataClassesDataContext();
            List<AutoresArtigo> lista = dc.AutoresArtigos.Where(p => p.idArtigo.Equals(idArtigo)).ToList();
            Usuario usuario = (Usuario)System.Web.HttpContext.Current.Session["Usuario"];
            AutoresArtigo tirarAutor = AutoresArtigo.findByIdPessoaIdArtigo(usuario.Pessoa.id, new Guid(idArtigo));
            //lista.Remove(tirarAutor);
            lista = lista.Where(p => !p.id.Equals(tirarAutor.id)).ToList();
            dc.AutoresArtigos.DeleteAllOnSubmit(lista);
            dc.SubmitChanges();
            return true;
        }
        catch(Exception ex)
        {
            return false;
        }
    }
    [WebMethod]
    public static void vincularAutor(string email, string idArtigo, int ordem)
    {
        Usuario usuario = Usuario.findByEmail(email);
        if (usuario.email != ((Usuario)System.Web.HttpContext.Current.Session["Usuario"]).email)
        {
            if (!AutoresArtigo.ArtigoByEmailArtigo(email, new Guid(idArtigo)))
            {
                AutoresArtigo aa = new AutoresArtigo();
                aa.confirmado = false;
                aa.id = Guid.NewGuid();
                aa.idArtigo = new Guid(idArtigo);
                aa.idPessoa = usuario.Pessoa.id;
                aa.ordem = ordem;
                AutoresArtigo.createAutoresArtigo(aa);
            }
        }
        //mandar email para confirmar email;
    }
    [WebMethod]
    public static Artigo getArtigo(string idArtigo)
    {
        return Artigo.getArtigoById(new Guid(idArtigo));
    }
    [WebMethod]
    public static Usuario getUsuario(string idUsuario)
    {
        return Usuario.findUsuarioByIdPessoa(new Guid(idUsuario));
    }
    [WebMethod]
    public static void editarArtigo(string idArtigo, string titulo, string descricao, string idTrilha)
    {
        Artigo.changeArtigo(new Guid(idArtigo), new Guid(idTrilha), titulo, descricao);
    }
}